from bs4 import BeautifulSoup

# 默认打开的编码格式是gbk的

soup = BeautifulSoup(open('demo.html', encoding='utf-8'), 'lxml')

# 根据标签签名查找节点
# print(soup.a)
# 获取标签属性和属性值
# print(soup.a.attrs)
# print(soup.a.string)

# bs4的一些函数
# 第一个标签
print(soup.find('a'))
# 根据title的值来找到标签对象
print(soup.find('a', title='a2'))
print(soup.find('a', class_='c2'))
# 返回列表
print(soup.find_all('a'))
# 获取多个标签
print(soup.find_all(['a', 'span']))

# limit限制条数
print(soup.find_all('li', limit=2))

# select 用法(推荐)
#select返回的是一个列表
print(soup.select('a'))
#.xx代表class 类选择器
print(soup.select('.c1'))
#id选择器
print(soup.select('#a2'))
#属性选择器
#查找li标签有id的标签
print(soup.select('li[id]'))
#查找li标签中id为l2的标签
print(soup.select('li[id="l2"]'))

# 4、层级选择器
#后代选择器
print(soup.select('div li'))

#子代选择器
#注意 div > ul > li一般中间不加空格会报错 但是这里不会
print(soup.select('div > ul > li'))

#找到a和li标签
print(soup.select('a,li'))

#5、节点信息
#获取节点内容
obj=soup.select('#d2')[0]
#如果标签对象中只有内容 get_text()和string一样 如果内容里还有标签 那么string获取不到 get_text()能
print(obj.string)
print(obj.get_text())
#节点属性
obj=soup.select('#p1')[0]
#节点名称
print(obj.name)
#将属性值 作为字典返回
print(obj.attrs)
#获取节点属性
print(obj.attrs.get('class'))
print(obj.attrs['class'])

print(obj.get('class'))#不推荐